package com.chenyun.gateway.config;//package com.chenyun.gateway.config;
//
//import cn.dev33.satoken.context.SaHolder;
//import cn.dev33.satoken.reactor.context.SaReactorSyncHolder;
//import cn.dev33.satoken.reactor.filter.SaReactorFilter;
//import cn.dev33.satoken.router.SaHttpMethod;
//import cn.dev33.satoken.router.SaRouter;
//import cn.dev33.satoken.stp.StpUtil;
//import cn.dev33.satoken.util.SaResult;
//import com.chenyun.gateway.vo.WhiteUrl;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.server.ServerWebExchange;
//
//import java.io.Serializable;
//
///**
// * 网关同一鉴权
// * 关闭同一鉴权,由子服务自己鉴权
// * @author: Lonni
// * @date: 2022/11/4 0004 15:39
// */
//@Configuration
//@Slf4j
//@EnableConfigurationProperties(WhiteUrl.class)
//public class SatokenConfig implements Serializable {
//    private static final long serialVersionUID = -2147379899915230862L;
//
//    @Autowired
//    private  WhiteUrl whiteUrl;
//
//
//    public SatokenConfig() {
//        log.info("gateway----->SatokenConfig被加载");
//    }
//
//    /**
//     * 注册 Sa-Token全局过滤器
//     *
//     * @return
//     */
//    @Bean
//    public SaReactorFilter getSaReactorFilter() {
//        return new SaReactorFilter()
//                // 拦截地址
//                .addInclude("/**")
//                // 开放地址
//                .addExclude("/favicon.ico")
//                // 鉴权方法：每次访问进入
//                .setAuth(obj -> {
//                    // 登录校验 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
//                    SaRouter.match("/**")
//                            .notMatch(whiteUrl.getAllIgnorePath())
//                            .check((r)->StpUtil.checkLogin());
//                    // 终止过滤器链
//                    SaRouter.match(whiteUrl.getAllIgnorePath()).stop();
//                })
//                // 异常处理方法：每次setAuth函数出现异常时进入
//                .setError(e -> {
//                    // 设置错误返回格式为JSON
//                    ServerWebExchange exchange = SaReactorSyncHolder.getContext();
//                    exchange.getResponse().getHeaders().set("Content-Type", "application/json; charset=utf-8");
//                    return SaResult.error(e.getMessage());
//                })
//                .setBeforeAuth(obj -> {
//                    // ---------- 设置跨域响应头 ----------
//                    SaHolder.getResponse()
//                            // 允许指定域访问跨域资源
//                            .setHeader("Access-Control-Allow-Origin", "*")
//                            // 允许所有请求方式
//                            .setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
//                            // 有效时间
//                            .setHeader("Access-Control-Max-Age", "3600")
//                            // 允许的header参数
//                            .setHeader("Access-Control-Allow-Headers", "*");
//
//                    // 如果是预检请求，则立即返回到前端
//                    SaRouter.match(SaHttpMethod.OPTIONS)
//                            .free(r -> System.out.println("--------OPTIONS预检请求，不做处理"))
//                            .back();
//                });
//    }
//
//
//}
//
//
//
